/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Model;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.*;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;

@Entity
@Table(name = "itemprevisao")
@SuppressWarnings("serial")
public class ItemPrevisao implements Serializable {
   @Id
   @SequenceGenerator(name = "cod_item_previsao", sequenceName = "cod_item_previsao_seq", allocationSize = 1)
   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "cod_item_previsao")
   @Column(name = "cod_item_previsao", nullable = false)
   private int codItemPrevisao;

   @ManyToOne(fetch = FetchType.EAGER, cascade=javax.persistence.CascadeType.MERGE)
   @Fetch(FetchMode.SELECT)
   @JoinColumn(name = "cod_previsao", insertable = true, updatable = true)
   private Previsao previsao;

   @ManyToOne(fetch = FetchType.EAGER)
   @Fetch(FetchMode.SELECT)
   @Cascade(CascadeType.LOCK)
   @JoinColumn(name = "cod_produto")
   private Produto produto;

   @Column (name = "quantidade")
   private double quantidade;

   @Column (name = "quantidade_auxiliar")
   private double quantidadeAuxiliar;

   @OneToMany(mappedBy = "itemPrevisao", fetch = FetchType.LAZY)
   @Fetch(FetchMode.SELECT)
   @Cascade(CascadeType.ALL)
   private Collection<ItemPedidoAssociado> itemPedidoAssociado;

   //Construtores
   public ItemPrevisao (){
    previsao = new Previsao();
   }

   public ItemPrevisao (int codItemPrevisao, Previsao previsao, Produto produto, double quantidade){
        this.codItemPrevisao = codItemPrevisao;
        this.previsao = previsao;
        this.produto = produto;
        this.quantidade = quantidade;
        this.quantidadeAuxiliar = quantidade;
   }

    //Metodos get e set
    public int getCodItemPrevisao() {
        return codItemPrevisao;
    }
    public void setCodItemPrevisao(int codItemPrevisao) {
        this.codItemPrevisao = codItemPrevisao;
    }
    public Previsao getPrevisao() {
        return previsao;
    }
    public void setPrevisao(Previsao previsao) {
        this.previsao = previsao;
    }

    public Produto getProduto() {
        return produto;
    }
    public void setProduto(Produto produto) {
        this.produto = produto;
    }

    public double getQuantidade() {
        return quantidade;
    }
    public void setQuantidade(double quantidade) {
        this.quantidade = quantidade;
    }

    public Collection<ItemPedidoAssociado> getItemPedidoAssociado() {
        return itemPedidoAssociado;
    }
    public void setItemPedidoAssociado(Collection<ItemPedidoAssociado> itemPedidoAssociado) {
        this.itemPedidoAssociado = itemPedidoAssociado;
    }

    public double getQuantidadeAuxiliar() {
        return quantidadeAuxiliar;
    }
    public void setQuantidadeAuxiliar(double quantidadeAuxiliar) {
        this.quantidadeAuxiliar = quantidadeAuxiliar;
    }
}
